home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / libogg / libvorbis-1.0rc3 / vq / cascade.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-10-27  |  2.4 KB  |  92 lines

  1. /********************************************************************
  2.  *                                                                  *
  3.  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
  4.  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
  5.  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
  6.  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  7.  *                                                                  *
  8.  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
  9.  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
  10.  *                                                                  *
  11.  ********************************************************************
  12.  
  13.  function: function call to do simple data cascading
  14.  last mod: $Id: cascade.c,v 1.13 2001/12/20 01:00:39 segher Exp $
  15.  
  16.  ********************************************************************/
  17.  
  18. /* this one outputs residue to stdout. */
  19.  
  20. #include <stdlib.h>
  21. #include <unistd.h>
  22. #include <math.h>
  23. #include "bookutil.h"
  24.  
  25. /* set up metrics */
  26.  
  27. float count=0.f;
  28.  
  29.  
  30. void process_preprocess(codebook **bs,char *basename){
  31. }
  32.  
  33. void process_postprocess(codebook **b,char *basename){
  34.   fprintf(stderr,"Done.                      \n");
  35. }
  36.  
  37. float process_one(codebook *b,float *a,int dim,int step,int addmul,
  38.            float base){
  39.   int j;
  40.  
  41.   if(b->c->q_sequencep){
  42.     float temp;
  43.     for(j=0;j<dim;j++){
  44.       temp=a[j*step];
  45.       a[j*step]-=base;
  46.     }
  47.     base=temp;
  48.   }
  49.  
  50.   vorbis_book_besterror(b,a,step,addmul);
  51.   
  52.   return base;
  53. }
  54.  
  55. void process_vector(codebook **bs,int *addmul,int inter,float *a,int n){
  56.   int i,bi=0;
  57.   int booknum=0;
  58.   
  59.   while(*bs){
  60.     float base=0.f;
  61.     codebook *b=*bs;
  62.     int dim=b->dim;
  63.     
  64.     if(inter){
  65.       for(i=0;i<n/dim;i++)
  66.     base=process_one(b,a+i,dim,n/dim,addmul[bi],base);
  67.     }else{
  68.       for(i=0;i<=n-dim;i+=dim)
  69.     base=process_one(b,a+i,dim,1,addmul[bi],base);
  70.     }
  71.  
  72.     bs++;
  73.     booknum++;
  74.     bi++;
  75.   }
  76.  
  77.   for(i=0;i<n;i++)
  78.     fprintf(stdout,"%f, ",a[i]);
  79.   fprintf(stdout,"\n");
  80.   
  81.   if((long)(count++)%100)spinnit("working.... lines: ",count);
  82. }
  83.  
  84. void process_usage(void){
  85.   fprintf(stderr,
  86.       "usage: vqcascade [-i] +|*<codebook>.vqh [ +|*<codebook.vqh> ]... \n"
  87.       "                 datafile.vqd [datafile.vqd]...\n\n"
  88.       "       data can be taken on stdin.  residual error data sent to\n"
  89.       "       stdout.\n\n");
  90.  
  91. }
  92.